#! /bin/sh
#
# Script to build binary
#
# Usage:
#	sh build
# or
#	./build

VER=`cat grub4dos_version`
DATE=`date -u +%Y-%m-%d`
RELEASE=grub4dos-${VER}-${DATE}
COPY_FILES="COPYING README_GRUB4DOS*.txt ChangeLog_*.txt \
	config.sys default menu.lst grub.pif \
	stage2/grldr stage2/grub.exe stage2/badgrub.exe stage2/grldr.mbr stage2/bootlace.com \
	stage2/hmload.com"

rm -rf *.zip *.7z *~ || exit $?

if svn export . grub4dos-temp --force > /dev/null ; then
	CURR_REVISION=""
	line=0
	while read w1 w2; do
		line=$(($line+1))

		if [ "$line" = 1 ]; then
			[ "$w1" = "" -o "$w2" != "" ] && break
		elif [ "$line" = 2 ]; then
			[ "$w1" != "" ] && break
		elif [ "$line" = 3 ]; then
			[ "$w1" != "dir" -o "$w2" != "" ] && break
		elif [ "$line" = 4 ]; then
			[ "$w1" = "" -o "$w2" != "" ] && break
			CURR_REVISION=$w1
		elif [ "$line" = 5 ]; then
			[ "$w1" = "" -o "$w2" != "" ] && break
			SVN_URL=$w1
			break
		else
			break
		fi
	done < .svn/entries

	if [ "$CURR_REVISION" = "" ]; then
		export LC_ALL=C
		svninfo=$(svn info)
		while read w1 w2 w3; do
			if [ "$w1" = "Revision:" -a "$w2" != "" -a "$w3" = "" ]; then
				CURR_REVISION=$w2
			fi
			if [ "$w1" = "URL:" -a "$w2" != "" -a "$w3" = "" ]; then
				SVN_URL=$w2
			fi
			[ "$CURR_REVISION" != "" -a "$SVN_URL" != "" ] && break
		done << EOF
$svninfo
EOF

	fi
	if [ "$CURR_REVISION" != "" ]; then

		# Generate patch file
		if [ "$SVN_URL" = "" ]; then
			SVN_URL="svn://svn.gna.org/svn/grub4dos/trunk"
		fi
		SVN_URL_HTTP=http://${SVN_URL#*://}

		export LC_ALL=C
		svn diff . > grub4dos-temp/grub4dos_r${CURR_REVISION}.diff 2> /dev/null
		Get_source="Get the source code of this build by using anonymous svn in this way:\r\n\r\nsvn co -r $CURR_REVISION ${SVN_URL_HTTP} grub4dos\r\n\r\n"
		if [ $SVN_URL = "svn://svn.gna.org/svn/grub4dos/trunk" ]; then
			Get_source="${Get_source}or in this way:\r\n\r\nsvn co -r $CURR_REVISION ${SVN_URL} grub4dos\r\n\r\n"
		fi
		if [ -s grub4dos-temp/grub4dos_r${CURR_REVISION}.diff ]; then
			echo -n -e "${Get_source}and then apply the patch against revision ${CURR_REVISION} you just downloaded:\r\n\r\n\
cd grub4dos\r\n\r\n\
patch -p0 < ../grub4dos_r${CURR_REVISION}.diff\r\n\r\n\
and now you may do a \"make\" to compile.\r\n\r\n\
			\r\n" > grub4dos-temp/Get_Source_of_This_Build.txt
		else
			echo -n -e "\
${Get_source}and now you may \"cd grub4dos\" and do a \"make\" to compile.\r\n\r\n\
			\r\n" > grub4dos-temp/Get_Source_of_This_Build.txt
		fi
	fi
elif ! git checkout-index -a -f --prefix=grub4dos-temp/ > /dev/null ; then
	if [ "grub4dos-temp" = "${PWD##*/}" ] ; then
		cd ..
	else
		files=$(echo *)
		if ! [ -d grub4dos-temp ] ; then
			mkdir grub4dos-temp || exit $?
		fi
		cp -a $files grub4dos-temp || exit $?
	fi
fi

cd grub4dos-temp || exit $?
make clean
#############################################
#	Build english version
#############################################

./configure --enable-preset-menu=preset_menu.lst || exit $?
make || exit $?
rm -rf grub4dos-${VER}
mkdir grub4dos-${VER} || exit $?
[ -f stage2/eltorito.sys ] && cp stage2/eltorito.sys grub4dos-${VER}
cp $COPY_FILES grub4dos-${VER} || exit $?
cd grub4dos-${VER}
# generate bootlace64.com
if [ -f bootlace.com ]; then
	set dummy `ls -l bootlace.com`
	# now the size of bootlace.com is $6
	dd if=bootlace.com of=bootlace.head bs=1 count=64
	dd if=bootlace.com of=bootlace.body bs=1 count=`expr $6 - 128` skip=64
	dd if=bootlace.com of=bootlace.tail bs=1 count=64 skip=`expr $6 - 64`
	cat bootlace.tail bootlace.body bootlace.head > bootlace64.com
	chmod a+x bootlace64.com
	rm -f bootlace.tail bootlace.body bootlace.head
fi
mkdir docs && mv *.txt docs/
mkdir sample && mv menu.lst default config.sys sample/
cd ..
if [ -f Get_Source_of_This_Build.txt ]; then
	cp Get_Source_of_This_Build.txt grub4dos-${VER}
	if [ -s grub4dos_r${CURR_REVISION}.diff ]; then
		cp grub4dos_r${CURR_REVISION}.diff grub4dos-${VER}
	fi
fi

#############################################
#	Build chinese version
#############################################

#patch -p1 < patch-chinese.diff || exit $?
#make || exit $?

#mkdir grub4dos-${VER}/chinese || exit $?
#cp README_GRUB4DOS_CN.txt stage2/grldr stage2/grub.exe stage2/badgrub.exe grub4dos-${VER}/chinese || exit $?

#############################################
#	Create ZIP ball or TAR ball
#############################################

rm -f ../${RELEASE}.zip ../${RELEASE}.rar ../${RELEASE}.tar.gz || exit $?
if ! 7z a ../${RELEASE}.7z grub4dos-${VER} ; then
	echo 7z failed. Continue with zip or tar...
	if ! zip -r -q ../${RELEASE}.zip grub4dos-${VER} ; then
		tar -czf ../${RELEASE}.tar.gz grub4dos-${VER}
	fi
fi

cd ..

# Do not remove grub4dos-temp as we can check and re-use it later.
